GreaterEqual
逐元素比较两个输入张量,判断 input1 的元素是否大于等于 input2 的对应元素。支持广播。
\[\text{output}_i = (\text{input1}_i >= \text{input2}_i)\]
输出一个布尔张量,如果比较结果为真,则对应元素为 true,否则为 false。
- 输入:
input1 - 第一个输入张量的数据地址。
input2 - 第二个输入张量的数据地址。
- params - 参数打包数组,格式如下:
input0_dims - 第一个输入张量 input1 的维度。
input1_dims - 第二个输入张量 input2 的维度。
output_dims - 输出张量的维度。
strides0 - 第一个输入张量 input1 的步长。
strides1 - 第二个输入张量 input2 的步长。
strides_output - 输出张量的步长。
num_dims - 维度数量。用于广播判断。
core_mask - 核掩码。
- 输出:
output - 写入比较结果的布尔张量。
- 支持平台:
FT78NEMT7004
备注
FT78NE 支持fp32, fp64, int8, int16, int32
MT7004 支持fp16, fp32, int16, int32
共享存储版本:
-
void fp_greater_equal_s(float *input1, float *input2, bool *output, long long *params, int core_mask)
-
void hp_greater_equal_s(half *input1, half *input2, bool *output, long long *params, int core_mask)
-
void dp_greater_equal_s(double *input1, double *input2, bool *output, long long *params, int core_mask)
-
void i32_greater_equal_s(int32_t *input1, int32_t *input2, bool *output, long long *params, int core_mask)
-
void i16_greater_equal_s(int16_t *input1, int16_t *input2, bool *output, long long *params, int core_mask)
-
void i8_greater_equal_s(int8_t *input1, int8_t *input2, bool *output, long long *params, int core_mask)
C调用示例:
1//FT78NE示例
2#include <stdio.h>
3#include <greater.h>
4int main(int argc, char* argv[]) {
5 float *input0 = (float *)0x81000000;
6 float *input1 = (float *)0x82000000;
7 bool *output = (bool *)0x83000000;
8 int *strides0 = (int*)0x85000000;
9 int *strides1 = (int*)0x86000000;
10 int *strides_output = (int*)0x87000000;
11
12 int i = 0;
13
14 srand(seed++);
15
16 float f_min = -100.0;
17 float f_max = 100.0;
18
19 // same shape
20 int input0_dims[] = {64, 16, 63}; // 2x2
21 int input1_dims[] = {1, 1, 1}; // 2x2
22 int output_dims[] = {64, 16, 63}; // 2x2
23 int num_dims = 3;
24
25 unsigned long long params[9];
26 params[0] = (unsigned long long)input0_dims;
27 params[1] = (unsigned long long)input1_dims;
28 params[2] = (unsigned long long)output_dims;
29 params[3] = (unsigned long long)strides0;
30 params[4] = (unsigned long long)strides1;
31 params[5] = (unsigned long long)strides_output;
32 params[6] = (unsigned long long)num_dims;
33
34 int total_input0 = get_total_elements(num_dims, input0_dims);
35 int total_input1 = get_total_elements(num_dims, input1_dims);
36 int total_output = get_total_elements(num_dims, output_dims);
37
38 int core_id = get_core_id();
39 int logic_core_id = GetLogicCoreId(core_mask, core_id);
40 int core_num = GetCoreNum(core_mask);
41
42 for(i = 0;i < total_input0;++i) {
43 input0[i] = f_min + ((float)rand() / (float)RAND_MAX) * (f_max - f_min);
44 }
45
46 for(i = 0;i < total_input1;++i) {
47 input1[i] = f_min + ((float)rand() / (float)RAND_MAX) * (f_max - f_min);
48 }
49
50 fp_greater_equal_s(input0, input1, output, params, core_mask);//调用汇编
51 return 0;
52}
私有存储版本:
-
void fp_greater_equal_p(float *input1, float *input2, bool *output, long long *params)
-
void hp_greater_equal_p(half *input1, half *input2, bool *output, long long *params)
-
void i32_greater_equal_p(int32_t *input1, int32_t *input2, bool *output, long long *params)
-
void i16_greater_equal_p(int16_t *input1, int16_t *input2, bool *output, long long *params)
-
void i8_greater_equal_p(int8_t *input1, int8_t *input2, bool *output, long long *params)
C调用示例:
1//FT78NE示例
2#include <stdio.h>
3#include <greater.h>
4int main(int argc, char* argv[]) {
5 float *input0 = (float *)0x10010000;
6 float *input1 = (float *)0x10020000;
7 bool *output = (bool *)0x10030000;
8 int *strides0 = (int*)0x10050000;
9 int *strides1 = (int*)0x10060000;
10 int *strides_output = (int*)0x10070000;
11
12 int i = 0;
13
14 srand(seed++);
15
16 float f_min = -100.0;
17 float f_max = 100.0;
18
19 // same shape
20 int input0_dims[] = {4, 8, 17}; // 2x2
21 int input1_dims[] = {1, 1, 1}; // 2x2
22 int output_dims[] = {4, 8, 17}; // 2x2
23 int num_dims = 3;
24
25 unsigned long long params[9];
26 params[0] = (unsigned long long)input0_dims;
27 params[1] = (unsigned long long)input1_dims;
28 params[2] = (unsigned long long)output_dims;
29 params[3] = (unsigned long long)strides0;
30 params[4] = (unsigned long long)strides1;
31 params[5] = (unsigned long long)strides_output;
32 params[6] = (unsigned long long)num_dims;
33
34 int total_input0 = get_total_elements(num_dims, input0_dims);
35 int total_input1 = get_total_elements(num_dims, input1_dims);
36 int total_output = get_total_elements(num_dims, output_dims);
37
38
39 for(i = 0;i < total_input0;++i) {
40 input0[i] = f_min + ((float)rand() / (float)RAND_MAX) * (f_max - f_min);
41 }
42
43 for(i = 0;i < total_input1;++i) {
44 input1[i] = f_min + ((float)rand() / (float)RAND_MAX) * (f_max - f_min);
45 }
46
47 fp_greater_equal_p(input0, input1, output, params);//调用汇编
48 return 0;
49}